{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a952b7d2",
   "metadata": {},
   "source": [
    "- https://www.ruder.io/optimizing-gradient-descent/"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e799cea",
   "metadata": {},
   "source": [
    "## basics"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ee33b9a",
   "metadata": {},
   "source": [
    "- DECOUPLED WEIGHT DECAY REGULARIZATION\n",
    "    - https://arxiv.org/pdf/1711.05101.pdf\n",
    "    - SGD: L2 reg == weight decay \n",
    "    - Adaptive Gradient：\n",
    "        - Adam\n",
    "- L2 reg 、weight decay 都是避免过拟合的手段\n",
    "    - 过拟合的一个标志就是一些 weight 的取值过大；\n",
    "        - 如一般 weight value range between [-5, 5]，\n",
    "        - 但 overfitting 时，weight value 可能会是 25 或者  -32\n",
    "    - 在数值上，L2 reg 与 weight decay 作用都是会降低 weight 的幅值（magnitude）\n",
    "\n",
    "$$\n",
    "\\begin{split}\n",
    "&w_t=w_{t-1}-\\Delta w\\\\\n",
    "&w_t=0.98w_t=w_t-0.02w_t\n",
    "\\end{split}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd6ef14d",
   "metadata": {},
   "source": [
    "## L2 reg ==? weight decay"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c207a5d",
   "metadata": {},
   "source": [
    "### SGD"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9005c8b4",
   "metadata": {},
   "source": [
    "- L2 reg\n",
    "\n",
    "$$\n",
    "\\begin{split}\n",
    "&\\mathcal L=\\mathcal L_{\\text{error}} + \\frac\\lambda2 ||w||^2\\\\\n",
    "&w=w-\\alpha \\frac{\\partial \\mathcal L}{\\partial w}-\\alpha\\lambda w\n",
    "\\end{split}\n",
    "$$\n",
    "\n",
    "- weight decay \n",
    "\n",
    "$$\n",
    "\\begin{split}\n",
    "&\\mathcal L=\\mathcal L_{\\text{error}} \\\\\n",
    "&w=w-\\alpha \\frac{\\partial \\mathcal L}{\\partial w}-\\alpha\\lambda w\n",
    "\\end{split}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "256d08dd",
   "metadata": {},
   "source": [
    "### SGD with Momentum"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df654ffd",
   "metadata": {},
   "source": [
    "- L2 reg\n",
    "\n",
    "$$\n",
    "\\begin{split}\n",
    "&\\mathcal L=\\mathcal L_{\\text{error}} + \\frac\\lambda2 ||w||^2\\\\\n",
    "&v_t=\\beta v_{t-1}+(1-\\beta)\\left(\\frac{\\partial \\mathcal L}{\\partial w}+\\lambda w\\right)\\\\\n",
    "&w=w-\\alpha v_t\n",
    "\\end{split}\n",
    "$$\n",
    "\n",
    "- weight decay\n",
    "\n",
    "$$\n",
    "\\begin{split}\n",
    "&\\mathcal L=\\mathcal L_{\\text{error}} \\\\\n",
    "&v_t=\\beta v_{t-1}+(1-\\beta)\\left(\\frac{\\partial \\mathcal L}{\\partial w}\\right)\\\\\n",
    "&w=w-\\alpha v_t-\\alpha\\lambda w\n",
    "\\end{split}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5d007871",
   "metadata": {},
   "source": [
    "### Adam => AdamW"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "63cca49e",
   "metadata": {},
   "source": [
    "- Adam\n",
    "$$\n",
    "\\begin{split}\n",
    "&\\mathcal L=\\mathcal L_{\\text{error}} + \\frac\\lambda2 ||w||^2\\\\\n",
    "&m_t=\\beta_1 m_{t-1}+(1-\\beta_1)\\left(\\frac{\\partial \\mathcal L}{\\partial w}+\\lambda w\\right)\\\\\n",
    "&v_t=\\beta_2 v_{t-1} + (1-\\beta_2)\\left(\\frac{\\partial \\mathcal L}{\\partial w}+\\lambda w\\right)^2\\\\\n",
    "&w=w-\\alpha\\frac{m_t}{\\sqrt{v_t}+\\epsilon}\n",
    "\\end{split}\n",
    "$$\n",
    "\n",
    "- AdamW\n",
    "\n",
    "    $$\n",
    "    \\begin{split}\n",
    "    &\\mathcal L=\\mathcal L_{\\text{error}}\\\\\n",
    "    &m_t=\\beta_1 m_{t-1}+(1-\\beta_1)\\left(\\frac{\\partial \\mathcal L}{\\partial w}\\right)\\\\\n",
    "    &v_t=\\beta_2 v_{t-1} + (1-\\beta_2)\\left(\\frac{\\partial \\mathcal L}{\\partial w}\\right)^2\\\\\n",
    "    &w=w-\\alpha\\frac{m_t}{\\sqrt{v_t}+\\epsilon} - \\alpha\\lambda w\n",
    "    \\end{split}\n",
    "    $$\n",
    "\n",
    "    - 引入 Bias Correction: $\\hat{m}_t = \\frac{m_t}{1 - \\beta_1^t}, \\hat{v}_t = \\frac{v_t}{1 - \\beta_2^t}$\n",
    "        - 后续更新\n",
    "            - $\\Delta W_t' = \\eta \\frac{\\hat{m}_t}{\\sqrt{\\hat{v}_t} + \\epsilon}$\n",
    "            - $W_t = W_{t-1} - (\\Delta W_t' + \\lambda W_{t-1})$\n",
    "        - 由于 $m_0, v_0$ 初始均为 0，，在训练初期，它们会偏向于 0，这一步是为了修正这个偏差。\n",
    "            - $\\beta_1=0.9$\n",
    "            - $t=1$：$m_1 = \\beta_1 m_0 + (1 - \\beta_1) g_1 = 0.9 \\cdot 0 + 0.1 \\cdot g_1 = 0.1 \\cdot g_1$，计算出的动量 $m_1$ 只有真实梯度 $g_1$ 的 10%，被初始的 $m_0=0$ 严重地 biased towards 0；\n",
    "            - $t=2$：$m_2 = \\beta_1 m_1 + (1 - \\beta_1) g_2 = 0.9 \\cdot (0.1 \\cdot g_1) + 0.1 \\cdot g_2 = 0.09 \\cdot g_1 + 0.1 \\cdot g_2$\n",
    "            - 引入 $\\hat{m}_t = \\frac{m_t}{1 - \\beta_1^t}$\n",
    "                - $t=1$：分母 $1 - \\beta_1^1 = 1 - 0.9 = 0.1$，$\\hat{m}_1 = \\frac{m_1}{0.1} = \\frac{0.1 \\cdot g_1}{0.1} = g_1$\n",
    "                - $t=2$：分母 $1 - \\beta_1^2 = 1 - 0.81 = 0.19$，$\\hat{m}_2 = \\frac{m_2}{0.19} = \\frac{0.09 \\cdot g_1 + 0.1 \\cdot g_2}{0.19}$\n",
    "                - 当 t 很大时 (比如 t=100)：$\\beta_1^t$ 约等于 0，分母约等于 1；"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "03bbf79f",
   "metadata": {},
   "source": [
    "## L2 tutorial"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "b21d8781",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:00:51.041580Z",
     "start_time": "2023-07-25T15:00:51.034718Z"
    }
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0d6cfe09",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T14:54:24.539055Z",
     "start_time": "2023-07-25T14:54:24.520384Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x7f6803f561b0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# default: 100.0\n",
    "plt.rcParams['figure.dpi'] = 120\n",
    "seed = 247\n",
    "torch.manual_seed(seed)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b2ae4cc5",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T14:55:39.420915Z",
     "start_time": "2023-07-25T14:55:39.404790Z"
    }
   },
   "outputs": [],
   "source": [
    "xs = torch.linspace(0, 1, 30)\n",
    "ys = 0.5 + 0.4*torch.sin(2*np.pi*xs) + torch.randn(xs.size())*0.05"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "6503d339",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T14:56:31.854000Z",
     "start_time": "2023-07-25T14:56:31.638730Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f67553ec3d0>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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nv9jIx2rJV34fydJ06bxtZNs4xmv999/X3/5l385GCAHXHfdderr69Px48eTXzDGJZVyB/+bJZWWlioSiaihoWFIe01NjQKBgIqLiy/a94MPPhiy+y0ej6u2tlbFxcUKBAITVnemGs94GYahu+66S88//7yeeuopjtGaJFbHrKioSK+//vqw2zXXXKMrr7xSr7/+uu69997JeAkZZTz/x7797W9Lkg4cODCkff/+/Zo2bZquu+665Bec4cYzXoFAQO+8886wE4u/9dZbkqR58+Ylv2CMS0rljkk9oVAKW7lypTF79mzj6aefNg4dOmTcddddhiSjtrZ28DkbN240nE6n8emnnw62ffHFF0ZBQYFxxRVXGC+99JLR1NRklJaWcrLxCWZ1vO69915DkrFx40bjrbfeGnJ777337HgpGcPqmI2E80ROPKvjFYvFjGuvvdb42te+ZjzxxBNGU1OT8b3vfc9wOp3Gvffea8dLyQhWx6u6utqQZKxatcrYt2+f8dprrxnf+973DJfLZZSUlNjxUjLG/v37jZdfftl47rnnDElGWVmZ8fLLLxsvv/yy8fnnnxuGkfq5gxDZr7u72wgGg8Y3vvENw+12G4sXLzbq6uqGPOef//mfDUnGJ598MqT9s88+M/7pn/7JmDNnjjFjxgzjr/7qr4ympqZJrD7zWB2v+fPnG5JGvM2fP39yX0SGGc//sT9HiJx44xmvzs5O4+677zb8fr8xffp0Iy8vz/jXf/1XI5FITOIryCzjGa+Ghgbjb/7mb4zLL7/cmDlzplFQUGD86Ec/GnYCciTXxb6PBsYo1XOHwzD6D1QBAAAAxohjIgEAAGAaIRIAAACmESIBAABgGiESAAAAphEiAQAAYBohEgAAAKYRIgEAAGAaIRIAAACmESIBAABgGiESAAAAphEiAQAAYBohEgAAAKYRIgEAAGAaIRIAAACm/T/4T/vsNgx4LwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 768x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(xs.numpy(), ys.numpy(), label='data', s=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "796f962a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:01:56.943882Z",
     "start_time": "2023-07-25T15:01:56.934112Z"
    }
   },
   "outputs": [],
   "source": [
    "class NN(torch.nn.Module):\n",
    "    def __init__(self, dim_h):\n",
    "        super().__init__()\n",
    "        self.ln1 = torch.nn.Linear(1, dim_h)\n",
    "        self.ln2 = torch.nn.Linear(dim_h, 1)\n",
    "    def forward(self, x):\n",
    "        return self.ln2(torch.nn.ReLU()(self.ln1(x)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "a1319c8a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:09:25.181608Z",
     "start_time": "2023-07-25T15:09:19.717133Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 10000/10000 [00:05<00:00, 1834.22it/s]\n"
     ]
    }
   ],
   "source": [
    "model = NN(300)\n",
    "loss_fn = torch.nn.MSELoss()\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.01)\n",
    "\n",
    "for _ in tqdm(range(10000)):\n",
    "    y_pred = model(xs.reshape(-1, 1))\n",
    "    loss = loss_fn(y_pred, ys.unsqueeze(1))\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "97528d41",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:09:56.856416Z",
     "start_time": "2023-07-25T15:09:56.626541Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 2.,  9., 30., 57., 42., 60., 32., 33., 25., 10.]),\n",
       " array([-1.73142874, -1.43855548, -1.14568222, -0.85280901, -0.55993575,\n",
       "        -0.26706249,  0.02581077,  0.31868401,  0.61155725,  0.90443051,\n",
       "         1.19730377]),\n",
       " <BarContainer object of 10 artists>)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAowAAAHuCAYAAAAV510aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAABJ0AAASdAHeZh94AAAiD0lEQVR4nO3de6zX9WH/8dfRo4BDejzAmbApRg+VejnanaG4lAoW7xDxANlq3KqNayt2q42t0NodPas/gxsm7RZp5wxqZ7X1AiYe0UYUtJfYuTGTox1zR7QYmxYEnOg4MsL390fjadmB9+D7PReBxyM5iX4u38/7+847J08+38upq1QqlQAAwB4cMtQDAADgg00wAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQVD/UA9hXb731Vp555pkcc8wxGTZs2FAPBwBgv/Lee+/l9ddfz9lnn52Ghoa9Ome/C8Znnnkms2fPHuphAADs1x555JFccskle3XsfheMxxxzTJJfP8nm5uYhHg0AwP6lu7s7s2fP7m2qvbHfBeP7L0M3Nzfn5JNPHuLRAADsn/blrX0+9AIAQJFgBACgSDACAFAkGAEAKBKMAAAUCUYAAIoEIwAARYIRAIAiwQgAQJFgBACgSDACAFAkGAEAKKopGH/0ox/loosuylFHHZURI0Zk4sSJ+frXv77LMWvWrMmMGTMycuTINDQ0pK2tLevWratp0AAADJ6qg/G+++7L2WefnQ996EP5zne+kxUrVmTBggWpVCq9x6xduzbTpk3L9u3b88ADD2Tp0qV5+eWXM3Xq1GzcuLFfngAAAAOrvpqT3njjjXzmM5/JZz/72SxZsqR3+/Tp03c5rr29PcOGDUtnZ2dGjRqVJGltbc3EiROzePHi3HrrrTUMHQCAwVDVHcY777wz7777bhYsWLDHY3bs2JHOzs7MmTOnNxaTZMKECZk+fXqWL19ezaUBABhkVQXjs88+m8bGxqxduzann3566uvr09TUlM997nN5++23kySvvPJKtm3blpaWlj7nt7S0pLu7Oz09PbWNHgCAAVf1S9L//d//nXnz5uUrX/lKvvGNb+T555/PjTfemBdffDE//OEPs2nTpiRJY2Njn/MbGxtTqVSyZcuWjBs3bo/X2bBhQ5/3OnZ3d1czZAAAqlRVMO7cuTM9PT258cYbs3DhwiTJtGnTcvjhh+faa6/NU089lSOOOCJJUldXt8fHKe1LkiVLlqSjo6OaIQIMqeMWPjbUQxgQry26eKiHAAyBql6SHj16dJLk/PPP32X7hRdemOTXX6Xz/jHv32n8bZs3b05dXV0aGhqK15k/f35efPHFXX4eeeSRaoYMAECVqrrD2NLSkueee67P9ve/UueQQw7JCSeckBEjRqSrq6vPcV1dXWlubs7w4cOL12lqakpTU1M1QwQAoJ9UdYdxzpw5SZLHH398l+0rVqxIkkyZMiX19fWZNWtWli1blq1bt/Yes379+qxatSptbW3VjhkAgEFU1R3G8847L7Nmzcpf//VfZ+fOnZkyZUr+5V/+JR0dHZk5c2Y+9rGPJUk6OjoyefLkzJw5MwsXLkxPT0/a29szZsyYXHfddf36RAAAGBhV/6WX73//+7n22mtzxx135MILL8y3vvWtfPGLX8xDDz3Ue8ykSZOyevXqHHbYYZk7d26uuOKKNDc359lnn83YsWP75QkAADCwqrrDmCQjRozIokWLsmjRouJxra2tWblyZbWXAQBgiFV9hxEAgIODYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACK6od6AMD/7biFjw31EAbEa4suHuohALAX3GEEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoqioYV69enbq6ut3+PPfcc7scu2bNmsyYMSMjR45MQ0ND2trasm7dun4ZPAAAA6++lpNvueWWTJ8+fZdtp5xySu9/r127NtOmTcvpp5+eBx54ID09PWlvb8/UqVPzwgsvZOzYsbVcHgCAQVBTME6cODFTpkzZ4/729vYMGzYsnZ2dGTVqVJKktbU1EydOzOLFi3PrrbfWcnkAAAbBgL2HcceOHens7MycOXN6YzFJJkyYkOnTp2f58uUDdWkAAPpRTcF4zTXXpL6+PqNGjcr555+fH/3oR737XnnllWzbti0tLS19zmtpaUl3d3d6enqKj79hw4a89NJLu/x0d3fXMmQAAPZRVS9Jf+hDH8oXvvCFTJs2LaNHj053d3f+9m//NtOmTctjjz2W888/P5s2bUqSNDY29jm/sbExlUolW7Zsybhx4/Z4nSVLlqSjo6OaIQIA0E+qCsaPfvSj+ehHP9r7/1OnTs2ll16aU089Nddff33OP//83n11dXV7fJzSviSZP39+5s2bt8u27u7uzJ49u5phAwBQhZo+9PLbGhoaMnPmzHz729/Otm3bMnr06CTpvdP42zZv3py6uro0NDQUH7OpqSlNTU39NUQAAKrQrx96qVQqSX595/CEE07IiBEj0tXV1ee4rq6uNDc3Z/jw4f15eQAABkC/BeOWLVvS2dmZ008/PcOHD099fX1mzZqVZcuWZevWrb3HrV+/PqtWrUpbW1t/XRoAgAFU1UvSl112WY499tj84R/+YcaMGZP//M//zG233ZZf/epXufvuu3uP6+joyOTJkzNz5swsXLiw94u7x4wZk+uuu66/ngMAAAOoqjuMLS0t+cEPfpCrrroqM2bMyA033JCTTjopP/nJTzJjxoze4yZNmpTVq1fnsMMOy9y5c3PFFVekubk5zz77rL/yAgCwn6jqDuPChQuzcOHCvTq2tbU1K1eurOYyAAB8AAzYX3oBAODAIBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQVD/UAwAOXsctfGyohwDAXnCHEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACK+i0Y77zzztTV1WXkyJF99q1ZsyYzZszIyJEj09DQkLa2tqxbt66/Lg0AwADql2B844038qUvfSnjx4/vs2/t2rWZNm1atm/fngceeCBLly7Nyy+/nKlTp2bjxo39cXkAAAZQvwTj5z73uXz84x/Pueee22dfe3t7hg0bls7Ozlx00UVpa2vLY489lo0bN2bx4sX9cXkAAAZQzcF477335plnnsmSJUv67NuxY0c6OzszZ86cjBo1qnf7hAkTMn369CxfvrzWywMAMMBqCsYNGzbk2muvzaJFi/L7v//7ffa/8sor2bZtW1paWvrsa2lpSXd3d3p6emoZAgAAA6y+lpPnz5+fE088MVdfffVu92/atClJ0tjY2GdfY2NjKpVKtmzZknHjxu32/A0bNvR5n2N3d3ctQwYAYB9VHYwPP/xwHn300fzbv/1b6urqiseW9pf2LVmyJB0dHdUOEQCAflBVML7zzju55ppr8hd/8RcZP3583nrrrSTJ9u3bkyRvvfVWDjvssIwePTrJb+40/rbNmzenrq4uDQ0Ne7zO/PnzM2/evF22dXd3Z/bs2dUMGwCAKlQVjG+++WZ+9atf5bbbbsttt93WZ/9RRx2VSy65JA899FBGjBiRrq6uPsd0dXWlubk5w4cP3+N1mpqa0tTUVM0QAQDoJ1UF49FHH51Vq1b12b5o0aI888wzefzxxzNmzJjU19dn1qxZWbZsWf7mb/4mRx55ZJJk/fr1WbVqVb74xS/WNnoAAAZcVcE4fPjwTJs2rc/2u+++O4ceeugu+zo6OjJ58uTMnDkzCxcuTE9PT9rb2zNmzJhcd9111Y4bAIBBMuB/S3rSpElZvXp1DjvssMydOzdXXHFFmpub8+yzz2bs2LEDfXkAAGpU09fq/G9333137r777j7bW1tbs3Llyv68FAAAg2TA7zACALB/E4wAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABTVD/UAAGCoHbfwsaEewoB4bdHFQz0EDhDuMAIAUCQYAQAo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M3PmzCxcuDA9PT1pb2/PmDFjct1119U+egAABlxVwfjoo48mSZ544ok88cQTffZXKpUkyaRJk7J69eosWLAgc+fOTX19fc4555wsXrw4Y8eOrWHYAAAMlqqCcfXq1Xt9bGtra1auXFnNZQAA+ADoty/uBgDgwCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUFR1MG7dujXXX399zjvvvIwdOzZ1dXW56aabdnvsmjVrMmPGjIwcOTINDQ1pa2vLunXrqr00AACDqOpg3LRpU+6444689957mT179h6PW7t2baZNm5bt27fngQceyNKlS/Pyyy9n6tSp2bhxY7WXBwBgkNRXe+KECROyZcuW1NXV5c0338ydd9652+Pa29szbNiwdHZ2ZtSoUUmS1tbWTJw4MYsXL86tt95a7RAAABgEVd9hrKurS11dXfGYHTt2pLOzM3PmzOmNxeTXsTl9+vQsX7682ssDADBIBvRDL6+88kq2bduWlpaWPvtaWlrS3d2dnp6egRwCAAA1qvol6b2xadOmJEljY2OffY2NjalUKtmyZUvGjRu32/M3bNjQ532O3d3d/T9QAAD2aECD8X2ll65L+5YsWZKOjo6BGBIAsJ86buFjQz2EAfHaoouHegh7NKDBOHr06CS/udP42zZv3py6uro0NDTs8fz58+dn3rx5u2zr7u4ufiobAID+NaDBeMIJJ2TEiBHp6urqs6+rqyvNzc0ZPnz4Hs9vampKU1PTQA4RAID/w4B+6KW+vj6zZs3KsmXLsnXr1t7t69evz6pVq9LW1jaQlwcAoB/UdIfx8ccfz7vvvtsbgz/72c/y0EMPJUkuuuiiHHHEEeno6MjkyZMzc+bMLFy4MD09PWlvb8+YMWNy3XXX1f4MAAAYUDUF49VXX52f//znvf//4IMP5sEHH0ySvPrqqznuuOMyadKkrF69OgsWLMjcuXNTX1+fc845J4sXL87YsWNrGz0AAAOupmB87bXX9uq41tbWrFy5spZLAQAwRAbla3X44DlQv5IAAOh/A/qhFwAA9n+CEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACKBCMAAEWCEQCAIsEIAECRYAQAoEgwAgBQJBgBACgSjAAAFAlGAACK6od6AB90xy18bKiHAAAwpNxhBACgSDACAFAkGAEAKBKMAAAUCUYAAIoEIwAARYIRAIAiwQgAQNGgBOM777yTa6+9NuPHj8/w4cNz+umn53vf+95gXBoAgBoNyl96aWtry/PPP59Fixblwx/+cO6777588pOfzM6dO3PZZZcNxhAAAKjSgAfjihUr8uSTT/ZGYpJMnz49P//5z/PlL385f/zHf5xDDz10oIcBAECVBvwl6eXLl2fkyJGZN2/eLtuvvPLK/OIXv8hPf/rTgR4CAAA1GPA7jC+++GI+8pGPpL5+10u1tLT07v+jP/qj3Z67YcOGbNy4cZdtP/vZz5Ik3d3dAzDavrZv/PmgXAcAOLi99NJLg3Kd9xvqvffe2+tzBjwYN23alOOPP77P9sbGxt79e7JkyZJ0dHTsdt/s2bP7ZXwAAB8Epywd3Ou9/vrr+YM/+IO9OnZQPvRSV1dX1b758+f3eSn77bffzssvv5xTTz01w4YN67cx7u+6u7sze/bsPPLII2lubh7q4RzwzPfgMt+Dz5wPLvM9+A7mOX/vvffy+uuv5+yzz97rcwY8GEePHr3bu4ibN29O8ps7jbvT1NSUpqamPtvPOuus/hvgAaa5uTknn3zyUA/joGG+B5f5HnzmfHCZ78F3sM753t5ZfN+Af+jl1FNPzb//+79nx44du2zv6upKkpxyyikDPQQAAGow4MF46aWX5p133snDDz+8y/Z77rkn48ePz5lnnjnQQwAAoAYD/pL0hRdemHPPPTdXX3113n777TQ3N+f+++/PE088kXvvvdd3MAIAfMANyodeli1blhtuuCHt7e3ZvHlzJk2alPvvvz9/8id/MhiXPyiMHTs2N954Y8aOHTvUQzkomO/BZb4HnzkfXOZ78JnzfVNXqVQqQz0IAAA+uAb8PYwAAOzfBCMAAEWCEQCAIsEIAECRYNwPbd26Nddff33OO++8jB07NnV1dbnpppv2+vy77747dXV1u/355S9/OXAD34/VOudJsmHDhlxxxRUZM2ZMjjjiiJx11ll56qmnBmbAB4B33nkn1157bcaPH5/hw4fn9NNPz/e+9729Otca37Na5tUa3nfVzrc1XJ1af1db43s2KF+rQ//atGlT7rjjjpx22mmZPXt27rzzzqoe56677sqkSZN22TZ69Oj+GOIBp9Y5f++99/KJT3wib731Vr75zW+mqakpt99+ey644IKsXLlyn/6e58Gira0tzz//fBYtWpQPf/jDue+++/LJT34yO3fuzGWXXbZXj2GN91XtvFrD1al1HVvD+6aW39XW+P+hwn5n586dlZ07d1YqlUpl48aNlSSVG2+8ca/Pv+uuuypJKs8///wAjfDAU+uc33777ZUklZ/85Ce92/7nf/6nctJJJ1XOOOOM/h7ufu+xxx6rJKncd999u2w/99xzK+PHj6/s2LGjeL41vnu1zKs1vO9qmW9ruDq1/K62xsu8JL0fev9lCQZPrXO+fPnynHjiiTnrrLN6t9XX1+fyyy/PP//zP+eNN97oj2EeMJYvX56RI0dm3rx5u2y/8sor84tf/CI//elPh2hk+7da5tUa3nfW8eCr5Xe1NV4mGA9iM2fOzKGHHprGxsa0tbXlxRdfHOohHbBefPHFtLS09Nn+/raXXnppsIf0gfbiiy/mIx/5SOrrd33XzPvztbdr1RrfVS3zag3vu/5Yx9bw4LHGy7yH8SB09NFH54YbbsiUKVMyatSodHV1ZdGiRZkyZUp+/OMf57TTThvqIR5wNm3alMbGxj7b39+2adOmwR7SB9qmTZty/PHH99m+t/Nlje9eLfNqDe+7WubbGh581niZO4xDbPXq1Xv8JNz//nnhhRf65ZoXXHBBbr755sycOTMf//jHc8011+SHP/xh6urq0t7e3i/X+CAbijlPUnyZ5EB+i0G1813LfB3sa7yklnk9WNdwLaqdM2t4aFjje+YO4xA78cQT84//+I97deyxxx47YOM47rjj8rGPfSzPPffcgF3jg2Io5nz06NG7/dfp5s2bk2S3/6o9UFQz3wMxXwfTGt+TWub1YF7D1ervObOGB5Y1XiYYh9i4ceNy1VVXDfUwkiSVSiWHHHLg33Qeijk/9dRT09XV1Wf7+9tOOeWUQR3PYKpmvk899dTcf//92bFjxy7v/6p1vg6WNb4ntczrwbyGqzUQ6/hgX8MDyRovs+pIkrz66qv58Y9/nClTpgz1UA5Il156adauXbvLpyJ37NiRe++9N2eeeWbGjx8/hKP74Ln00kvzzjvv5OGHH95l+z333JPx48fnzDPP3OfHtMZrm1dreN/19zq2hgeWNf5/GOKv9aFKK1asqDz44IOVpUuXVpJU5s2bV3nwwQcrDz74YOXdd9/tPe7Tn/505dBDD6289tprvds+8YlPVDo6OirLly+vPPXUU5VvfOMblfHjx1eOPPLISldX11A8nf1CLXPe09NTOfnkkyvHHHNM5bvf/W7lySefrFx66aWV+vr6yurVq4fi6XzgnXvuuZWjjjqqcscdd1Sefvrpyp//+Z9XklTuvffeXY6zxvfN3syrNdx/qp1va7h6e/O72hrfd4JxPzVhwoRKkt3+vPrqq73HfepTn+qz7dprr62cdNJJlSOPPLJSX19fGT9+fOXyyy+v/Md//MfgP5H9SC1zXqlUKr/85S8rf/Znf1ZpbGysDB8+vDJlypTKk08+ObhPYj+ydevWyl/+5V9Wjj766Mrhhx9eaWlpqdx///19jrPG983ezKs13H+qnW9ruHp787vaGt93dZVKpTIYdzIBANg/eQ8jAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAoEowAABQJRgAAigQjAABFghEAgCLBCABAkWAEAKBIMAIAUCQYAQAo+v/PgNbGxCCPhAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 768x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(model.ln1.weight.detach().numpy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "4aff2993",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:03:20.042113Z",
     "start_time": "2023-07-25T15:03:19.805804Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f675488bd30>]"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApEAAAHwCAYAAAD+azSpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAABJ0AAASdAHeZh94AABpc0lEQVR4nO3deXiU5fn28e8smewQEkggBAgQtoRVBQRUVAIuXRQtFaptQbRVqqnWamup269a6VvrQiutu1QUWsviBgoBVAQEF0AgbGGHQBISAtknM/O8f0wSiWzJJJlnJjk/x5FDeZJn5gpDkjP3ct0WwzAMREREREQawGp2ASIiIiISfBQiRURERKTBFCJFREREpMEUIkVERESkwRQiRURERKTBFCJFREREpMEUIkVERESkwRQiRURERKTBFCJFREREpMEUIkVERESkwRQiRURERKTBfA6RxcXFPPDAA4wbN44OHTpgsVh49NFH631/Xl4ekydPpn379kRERDBixAiWL1/uazkiIiIi4kd2X28sKCjgxRdfZNCgQVx//fW8/PLL9b63srKSMWPGUFRUxHPPPUd8fDzPP/88V199NZmZmYwePbpBtRQVFfHJJ5/QpUsXQkNDG/qpiIiIiLRqlZWVHDx4kNGjRxMTE1O/mwwfeTwew+PxGIZhGPn5+QZgPPLII/W69/nnnzcAY82aNbXXqqqqjNTUVGPYsGENrmXRokUGoDe96U1vetOb3vSmt0a8LVq0qN75y+eRSIvF4uutLFy4kD59+jBixIjaa3a7nVtuuYU//OEPHD58mM6dO9f78bp06QLAokWLSElJ8bkuERERkdYoOzub66+/vjZT1YfPIbIxtmzZwqWXXnra9YEDBwKwdevWBoXIminslJQU0tLSmqZIERERkVamIcsCTQmRBQUFxMbGnna95lpBQcFZ783LyyM/P7/Otezs7KYtUERERETOyZQQCeeeDj/X+2bNmsVjjz3WHCWJiIiISD2ZEiLj4uLOONpYWFgIcMZRyhrTpk1jwoQJda7VzOOLiIiIiH+YEiIHDBjA5s2bT7tec61///5nvTc+Pp74+Phmq01EREREzs+UE2vGjx/P9u3bWbduXe01l8vFnDlzGD58OImJiWaUJSIiIiL11KiRyCVLllBaWkpxcTEAWVlZ/O9//wPg2muvJSIigqlTpzJ79mx2795Nt27dALj11lt5/vnnmTBhAjNmzCA+Pp5Zs2axY8cOMjMzG/kpiYiIiEhza1SIvPPOO9m/f3/tn99++23efvttAPbu3UtycjJutxu3241hGLUfFxoayvLly3nggQe4++67KSsrY/DgwSxZsqTBp9WIiIiIiP81KkTu27fvvB/z+uuv8/rrr592PSEhgdmzZzfm6UVERETEJKasiRQRERGR4KYQKSIiIiINphApIiIiIg2mECkiIiIiDaYQKSIiIiINphApIiIiIg2mEClispJKFztziympdJldioiISL2Zcna2iHhlZuWSMW8DZU43EQ4bMycOIT01weyyREREzksjkSImKal0kTFvA+VONwDlTjcZ8zZoRFJERIKCQqSISXKKyilzuqk5ENQAypxucorKzSxLRESkXhQiRUySGBNOhMOGpfrPFiDCYSMxJtzMskREROpFIVLEJFGhdmZOHEK4wwZAePWayKhQLVUWEZHAp59WIiZKT01g/fR0corKSYwJV4AUEZGgoZ9YIiaLCrXTOyHa7DJEREQaRNPZIiIiItJgCpEiIiIi0mAKkSIiIiLSYAqRIiIiItJgCpEiIiIi0mAKkSIiIiLSYAqRIiIiItJgCpEiIiIi0mAKkSImK66o4v1vciitdJldioiISL3pxBoRE7k9BpNf+4Kv9h9naHI75v1iBDarxeyyREREzksjkSImennVHr7afxyAL/Yd51+f7Da5IhERkfpRiBQxSXZeMX9btrPOtWeW7eSbQ0XmFCQiItIACpEiJnC5Pdz39jc4XR4sFvi/69IIsVlweQzumbeRMqfWR4qISGBTiBQxwUur9rLpYBEAt13SnZ+NSOY3Y/sAsOdYKU98sM3E6kRERM5PIVLEz3blFvNM9TR2jw6R3DfOGx5/cVkPhnWPBeDNdQfIzMo1rUYREZHzUYgU8SOX28Nv396E0+3BaoG//mgQYSE2AGxWC0//eBDRYd6mCb+b/w35xZVmlisiInJWCpEifvTiqj1sOnQCgNsu7cGF3drVeX9Suwgev74/AAWlTn43/xsMw/B7nSIiIuejECniJztzi3l22S4AenaI5Ddje5/x464b3JkfDkoEYMX2POasO+C3GkVEROpLIVLED747jf3UhG+nsc/kT9f3J7FtGABPfJBFdl6Jv0oVERGpF4VIET944dM9fFM9jX37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\n",
      "text/plain": [
       "<Figure size 768x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_test = torch.linspace(0, 1, 30)\n",
    "y_test = model(x_test.reshape(-1, 1)).squeeze()\n",
    "plt.scatter(xs.numpy(), ys.numpy(), label='data', s=5)\n",
    "plt.plot(x_test.numpy(), y_test.detach().numpy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "3bfb2d67",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:04:48.225086Z",
     "start_time": "2023-07-25T15:04:48.218316Z"
    }
   },
   "outputs": [],
   "source": [
    "def weights_norm(model):\n",
    "    norm = 0\n",
    "    for para in model.parameters():\n",
    "        norm += torch.sum(para ** 2)\n",
    "    norm = torch.sqrt(norm)\n",
    "    return norm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "ca2e7636",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:04:54.344811Z",
     "start_time": "2023-07-25T15:04:54.326195Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(15.0379, grad_fn=<SqrtBackward0>)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "weights_norm(model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "bf50eeac",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:07:50.852350Z",
     "start_time": "2023-07-25T15:07:43.511131Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 10000/10000 [00:07<00:00, 1364.63it/s]\n"
     ]
    }
   ],
   "source": [
    "model2 = NN(300)\n",
    "loss_fn = torch.nn.MSELoss()\n",
    "optimizer = torch.optim.Adam(model2.parameters(), lr=0.01)\n",
    "l2_reg_lambda = 0.0001\n",
    "\n",
    "for _ in tqdm(range(10000)):\n",
    "    y_pred = model2(xs.reshape(-1, 1))\n",
    "    l2_reg = 0\n",
    "    for param in model2.parameters():\n",
    "        l2_reg += torch.sum(param ** 2)\n",
    "    \n",
    "    loss = loss_fn(y_pred, ys.unsqueeze(1)) + l2_reg_lambda * l2_reg\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "544bcdd0",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:07:52.181027Z",
     "start_time": "2023-07-25T15:07:51.900020Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f675395aaa0>]"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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k1PoZPyc9eQXj9jlO1yMn7Oe1ZMS/WJE8nzsNivx0Q2Jj27I7X3bml2O1GK6q1ZEROqc1Kx88hwuincqxMAzUSU1K9/MskT8ikKkiIjUOdHhIYQG2iiZXmLBs2ROdHiImWWJ+BWFSBERqXPCguxMG9WdkEDP1oIhxfdE+nsrW6Qm6btFRETqpMROUayelOhXs7NFfIm+Y0REpM4KC7ITG1Xf7DJE/JLa2SIiIiJSYQqRIiIiIlJhCpEiIiIiUmEKkSIiIiJSYQqRIiIiIlJhCpEiIiIiUmEKkSIiIiJSYQqRIiIitVROoZMdadnkFDrNLkVqIS02LiIiUgslbUlj/Jz15DlchBZv65jYKcrssqQW0UikiIhILZNT6GT8nPXkO1wA5DtcjJ+zXiOSUqUUIkVERGqZ1Kx88hwujOL/N4A8h4vUrHwzy5JaRiFSRESklokODyE00Ial+P8tQGigjejwEDPLklpGIVJERKSWCQuyM21Ud0ICbQCEFN8TGRakqRBSdfSvSUREpBZK7BTF6kmJpGblEx0eogApVU7/okRERGqpsCA7sVH1zS5Daim1s0VERESkwhQiRURERKTCFCJFREREpMIUIkVERESkwhQiRURERKTCFCJFREREpMIUIkVERESkwhQiRURERKTCFCJFREREpMK8DpE5OTk89NBDREdHExwcTLdu3ZgzZ065zk1PT+fOO++kSZMmhIaG0rdvX77++mtvSxERERGRGub1tofDhw/n559/ZurUqcTGxjJr1ixGjx6N2+3md7/73TnPKyws5NprryUrK4s333yTyMhI3nrrLQYNGkRSUhJXXXWVtyWJiIiISA3xKkQuXryYZcuWlQZHgH79+rF//34mTJjALbfcgs1mO+u577//PsnJyfzwww/07du39NyuXbsyceJEVq1a5eVbEREREZGa4lU7e+HChYSFhTFy5Mgyx8eMGUNqaup5g+DChQvp0KFDaYAEsNvt3HbbbaxevZrDhw97U5KIiIiI1CCvQmRycjJxcXHY7WUHMhMSEkofP9+5Jc8727kpKSnelCQiIiIiNcirdnZGRgbt2rU743hERETp4+c7t+R5FT0XPJNyjh07VubYli1bANi1a9f5CxcRERGRM5RkqMLCwnKf4/XEGovF4tVjlT13+vTpTJ48+ayPDR069LznioiIiMi5HTx4kB49epTruV6FyMaNG591xDAzMxPgrCONVXEuwLhx4864F/PUqVPs2LGDLl26EBQUdMH6K2PXrl0MHTqURYsWERMTU62fSypP18v/6Jr5F10v/6Lr5V9q8noVFhZy8ODBCq2S41WI7NKlC7Nnz8bpdJa5L3Lz5s0AdO7c+bznljzvdOU5FyAyMpLIyMgzjp8+UacmxMTEEB8fX6OfU7yn6+V/dM38i66Xf9H18i81db3KOwJZwquJNcOGDSMnJ4f58+eXOT5jxgyio6Pp06fPec/dtm1bmRncTqeTmTNn0qdPH6Kjo70pSURERERqkFcjkYMHD6Z///7cd999nDp1ipiYGGbPns3SpUuZOXNm6RqRY8eOZcaMGezevZs2bdoAcNddd/HWW28xcuRIpk6dSmRkJNOnT2f79u0kJSVV3TsTERERkWrj9cSaBQsWMGnSJJ555hkyMzPp2LEjs2fPZtSoUaXPcblcuFwuDMMoPRYUFMTXX3/NxIkTeeCBB8jLy6Nbt24sWbJEu9WIiIiI+AmLcXrCkwtKT09n+vTpjBs37qz3Zopv0fXyP7pm/kXXy7/oevkXX79eCpEiIiIiUmFeTawRERERkbpNIVJEREREKkwhUkREREQqTCFSRERERCpMIbJYTk4ODz30ENHR0QQHB9OtWzfmzJlTrnPT09O58847adKkCaGhofTt25evv/66miuu27y9XgsWLGD06NHExMQQEhJC27ZtufXWW9m5c2cNVF23VeZ77HRPPfUUFovlgrtbSeVU9np9+umnXHXVVTRo0IB69eoRHx/PO++8U40V122VuV4rVqygf//+REZGEhYWRkJCAtOmTcPlclVz1XVXdnY2EydOZMCAATRt2hSLxcJzzz1X7vN9JncYYhiGYfTv398IDw83/vnPfxrLly837r77bgMwPvnkk/OeV1BQYHTu3Nlo2bKlMXPmTOOrr74ybrrpJsNutxvffPNNDVVf93h7vXr37m3ceOONxgcffGB88803xscff2zExcUZYWFhRnJycg1VXzd5e81Ot379eiMoKMiIiooy4uPjq7Faqcz1eumllwyr1WqMGzfOWLJkiZGUlGT8/e9/N/72t7/VQOV1k7fXa9myZYbVajWuvvpqY9GiRcayZcuMBx54wACM8ePH11D1dc/evXuNhg0bGldeeWXptXr22WfLda4v5Q6F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\n",
      "text/plain": [
       "<Figure size 768x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_test = torch.linspace(0, 1, 30)\n",
    "y_test = model2(x_test.reshape(-1, 1)).squeeze()\n",
    "plt.scatter(xs.numpy(), ys.numpy(), label='data', s=5)\n",
    "plt.plot(x_test.numpy(), y_test.detach().numpy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "4ff3267c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:07:58.870855Z",
     "start_time": "2023-07-25T15:07:58.861960Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(4.8838, grad_fn=<SqrtBackward0>)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "weights_norm(model2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "a079c9c8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-25T15:09:00.662849Z",
     "start_time": "2023-07-25T15:09:00.423257Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([  1.,   3.,   6.,  14.,  13., 245.,  12.,   4.,   1.,   1.]),\n",
       " array([-1.05048752, -0.86233264, -0.67417777, -0.48602292, -0.29786804,\n",
       "        -0.10971317,  0.0784417 ,  0.26659659,  0.45475143,  0.64290631,\n",
       "         0.83106118]),\n",
       " <BarContainer object of 10 artists>)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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fnu88847sWTJkpZx9fX1ceKJJ8Y555wT1dXVLV+QPnDgwLjhhhs6e5oAAHRQp1+xHD16dDz11FMxffr0OP3006OmpiaGDx8ev/nNb+L0009vGVdZWRmrV6+OL3zhC3HBBRfEZZddFhUVFfGLX/zCb90BADgAdPoVy+rq6qiurm7X2LFjx8azzz7byTMCAKAzdIvfvAMAwIFPWAIAkISwBAAgCWEJAEASwhIAgCSEJQAASQhLAACSEJYAACQhLAEASEJYAgCQhLAEACAJYQkAQBLCEgCAJIQlAABJCEsAAJIQlgAAJCEsAQBIQlgCAJCEsAQAIAlhCQBAEsISAIAkhCUAAEkISwAAkhCWAAAkISwBAEhCWAIAkISwBAAgCWEJAEASwhIAgCSEJQAASQhLAACSEJYAACQhLAEASEJYAgCQhLAEACAJYQkAQBLCEgCAJIQlAABJCEsAAJIQlgAAJCEsAQBIQlgCAJCEsAQAIAlhCQBAEsISAIAkhCUAAEkISwAAkhCWAAAkISwBAEhCWAIAkISwBAAgCWEJAEASwhIAgCSEJQAASQhLAACSKOrqCQBpHVn9866eQqd449azu3oKAOyFK5YAACThiiVwQOipV2IBehJXLAEASMIVSwCS66lXmL3XF9rmiiUAAEkISwAAkhCWAAAkISwBAEhCWAIAkISwBAAgCWEJAEASwhIAgCSEJQAASfjNOxy0eupvBgGAruKKJQAASQhLAACS8FI4ALRTT30LzRu3nt3VU6CHcMUSAIAkutUVyw8++CBqa2vjkUceiS1btkRlZWVUV1fHRRdd1NVTO6j11H+hAwBpdauwnDJlSqxbty5uvfXWOO644+Khhx6Kiy++OD755JO45JJLunp6AAC0oduE5RNPPBHPPPNMS0xGREyYMCHefPPN+Kd/+qe48MILo1evXl08SwAA9qTbvMdy2bJlUVpaGlOnTs3bPm3atPjjH/8Yv/vd77poZgAAtEe3uWK5fv36+NrXvhZFRflTGj16dMv+b37zm3u8/aZNm2Lz5s1521588cWIiGhsbEw8290744dr9svjAEBKQ69Y1NVTYB898/++vV8eZ1dDffTRR+0a323CsqmpKY4++uhW28vKylr2t2XRokVRX1+/232TJk3q8PwAALqLkffu38fbsGFDfP3rX9/ruG4TlhERuVyuoH0RETNmzGj1Mvr7778fL7/8cowaNSqKi4uTzDG1xsbGmDRpUixfvjwqKiq6ejrdjvVpm/Vpm/Vpm/Vpm/XZM2vTtp60Ph999FFs2LAhvv3t9l0h7TZhOWDAgN1eldyyZUtEfHblck/Ky8ujvLy81faTTz45zQQ7WUVFRYwYMaKrp9FtWZ+2WZ+2WZ+2WZ+2WZ89szZt6ynr054rlbt0mw/vjBo1Kv7nf/4ndu7cmbe9oaEhIiJGjhzZFdMCAKCduk1YTp48OT744IP46U9/mrf9/vvvj6FDh8ZJJ53URTMDAKA9us1L4d/5znfijDPOiKuuuiref//9qKioiIcffjhWrlwZDzzwgO+wBADo5rpNWEZEPPbYY1FTUxOzZ89u+ZWODz/8cI/+lY6DBg2KW265JQYNGtTVU+mWrE/brE/brE/brE/brM+eWZu2Hczrk8uyLOvqSQAAcODrNu+xBADgwCYsAQBIQlgCAJCEsAQAIAlh2Um2bt0aN954Y0ycODEGDRoUuVwu6urq9uk+Nm3aFJdddlkMHDgw+vTpEyeffHI899xzux377LPPxsknnxx9+vSJgQMHxmWXXRabNm1K8Ew6zwcffBDXXXddDB06NEpKSuL444+Pn/zkJ+267fjx4yOXy+3xz8aNG/c6tqqqqrOeWhIdWZ8lS5a0a212OdiOn8ceeywuvvjiqKioiN69e8eRRx4Z//AP/xCvvPJKq7Hd+fjpyBr09PNLROHr01OOj70pdH0OhvNLROHrczD8fGpLt/q6oZ6kqakpFi9eHGPGjIlJkybF3XffvU+3/+ijj+K0006LP/3pT/HjH/84ysvLY+HChVFVVRXPPvts3u/sXLNmTXznO9+Js88+Ox5//PHYtGlT3HTTTXHaaafFf/zHf3Tb35M+ZcqUWLduXdx6661x3HHHxUMPPRQXX3xxfPLJJ3HJJZe0edtFixbF+++/n7dt27ZtUVVVFWPHjo3Bgwfn7Tv66KPjwQcfzNvWv3//JM+js3RkfXa57777orKyMm/bgAED8v5+MB4/t912WwwePDhqamri6KOPjg0bNsS8efPi61//eqxdu7bVr2DrrsdPoWtwMJxfIgpfn55yfOxNR88xPfn8ElH4+hwMP5/alNEpPvnkk+yTTz7JsizLNm/enEVEdsstt7T79gsXLswiIvvNb37Tsm3Hjh3Z8OHDs2984xt5Y0888cRs+PDh2Y4dO1q2/frXv84iIlu0aFHHnkgn+fnPf55FRPbQQw/lbT/jjDOyoUOHZjt37tzn+1yyZEkWEdndd9+dt/3b3/52NmLEiA7Nd3/r6Prcd999WURk69at2+tjHYzHzzvvvNNq29tvv5194QtfyK644oq87d31+OnIGvT080uWdWx9esLxsTcdWZ+efn7JsvQ/o3rSz6e98VJ4J9l1ObtQy5Yti69+9atx8sknt2wrKiqKSy+9NP793/893n777YiIePvtt2PdunXx3e9+N4qKPrsA/c1vfjOOO+64WLZsWeFPohMtW7YsSktLY+rUqXnbp02bFn/84x/jd7/73T7f5z333BOlpaVx4YUXpppml+mM9dmdg/X4KS8vb7Vt6NChcfjhh8eGDRuSzrWzdGQNevr5JaJj69MTjo+92R/nmIP1+NmdnvTzaW+EZTe1fv36GD16dKvtu7b94Q9/aBn319s/P3bX/u5m/fr18bWvfS3vZBPx2fPY13m/8sor8ctf/jIuuuiiKC0tbbX/1VdfjbKysigqKopjjjkmampqYvv27YU/gU6Wan3OOeec6NWrV5SVlcWUKVNa3c7x85nXXnst3nzzzVYvc0Z0z+OnI2vQ088vEemPkQPt+NibFOvTU88vEWmPn57282lvvMeym2pqaoqysrJW23dta2pqyvvfPY3dtb+7aWpqiqOPPrrV9s8/v/a65557IiLiiiuuaLXvW9/6Vlx44YVRWVkZ27dvjyeffDL++Z//OX71q1/F888/H4cc0v3+fdXR9dn1/rBx48ZFv379oqGhIW699dYYN25c/PrXv44xY8bk3c/Bfvzs3LkzrrjiiigtLY3rr78+b193PX46sgY9/fwSkfYYORCPj73pyPr09PNLRNrjp6f9fNobYdkOq1evjgkTJrRr7H/+53/G8ccfn+Rx23op/fP79jS2Iy/Ht1eh67Mvz68tO3fujPvvvz9GjBgR48aNa7V/zpw5eX8/66yz4sgjj4zvf//78fjjj8fkyZPb/ViF6Ir1qaqqyvtU4d/93d/F2WefHaNGjYrZs2fH448/3q77OxiOnyzL4oorrohf/vKX8dOf/jSOOOKIvP1dffy0pSNrcKCcXzoixTFyIB8fe1Po+hxI55eOSHH8dPefT51BWLbDV7/61bjrrrvaNfYrX/lKksccMGDAbv9FtGXLloj47F9Nuz6Bt6exu/uXYmqFrE97n197PPHEE7Fx48a46aab2n2bSy+9NL7//e/H2rVrO/0/3K5en12OPPLI+Na3vhVr165t2XawHz9ZlsX06dPjgQceiPvvvz/OO++8dt1ufx4/e9KRNTiQzi+FSnGMHMjHx96kPsd01/NLoVKtT3f/+dQZhGU7DBkyJKZPn75fH3PUqFHR0NDQavuubSNHjsz734aGhjjrrLNajd21vzMVsj6jRo2Khx9+OHbu3Jn3HpbPP7/2uOeee+KLX/xifPe7392nOUTEfnmZoavX569lWZb3nA/m42dXNNx3331xzz33xKWXXrpvE4/9c/zsSUfW4EA6vxSqo8fIgX587E1nnGO64/mlUKnWp7v/fOoUXfeB9INHIV83tGjRoiwisrVr17Zs27FjRzZixIjspJNOyhv7jW98Ixs5cmTe1x/89re/zSIiu/POOzs8/87wxBNPZBGR/eQnP8nbXlVVtU9f5fB///d/WVFRUfb3f//3+/T4t912WxYR2fLly/fpdvtLqvX5a6+99lpWWlqaTZo0KW/7wXj8fPLJJ9kVV1yR5XK5bPHixfv8+N3h+OnIGvT080uWdWx9esLxsTepzzE96fySZWnWp6f+fNobYdmJnnjiiWzp0qXZvffem0VENnXq1Gzp0qXZ0qVLsw8//LBl3OWXX5716tUre+ONN1q2NTc3ZyNGjMiOOOKI7MEHH8yeeeaZbPLkyVlRUVG2evXqvMd5/vnns6Kiomzy5MnZM888kz344IPZEUcckY0cOTJrbm7eb893X51xxhnZ3/zN32SLFy/OVq1alV155ZVZRGQPPPBA3rjdrc8ut956axYR2dNPP73bx/jFL36RnXnmmdm//uu/Zk8//XT2b//2b9lVV12V9erVKzv11FOzjz/+uFOeWwodWZ/TTjstq6+vz5YtW5Y999xz2R133JENHTo0O/TQQ7OGhoa82x+Mx88111yTRUR2+eWXZ7/97W/z/rzwwgst47r78dOeNThYzy9ZVvj69JTjY28KXZ+D4fySZYWvzy49+edTW4RlJxo2bFgWEbv98/rrr7eM+8d//MdW27IsyzZu3Jh973vfy8rKyrKSkpJs3Lhx2TPPPLPbx3r66aezcePGZSUlJVlZWVn2ve99b7df8tudbN26NZs5c2Y2ePDg7Itf/GI2evTo7OGHH241bk/rk2VZdtxxx2VHHnlky5fRf94rr7ySnXXWWdlhhx2WFRcXZyUlJdmoUaOyuXPndvuTWkfW57rrrsuGDx+eHXrooVlRUVE2dOjQ7NJLL83+93//d7ePdbAdP239tzls2LCWcd39+GnPGhys55csK3x9esrxsTeFrs/BcH7Jso7995VlPfvnU1tyWZZl6V5YBwDgYHWAvjMUAIDuRlgCAJCEsAQAIAlhCQBAEsISAIAkhCUAAEkISwAAkhCWAAAkISwBAEhCWAIAkISwBAAgCWEJAEASwhIAgCSEJQAASfx/I0ACgPE/E2oAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 768x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(model2.ln1.weight.detach().numpy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1a603542",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
